package com.fpc.cn.springbootutil.Slf4jLog;

import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.AppenderBase;
import ch.qos.logback.core.util.OptionHelper;
import org.springframework.stereotype.Component;

/**
 * @date 2025/4/29
 * @author fupengcheng
 * @describe 自定义的日志拦截器（Appender）
 */
@Component
public class LoggingInterceptorAppender extends AppenderBase<ILoggingEvent> {

    private Level minLevel;
    private String packagePrefix;

    // 设置最小日志级别，这里通过字符串来设置
    public void setMinLevel(Level levelStr) {
        this.minLevel = levelStr;
    }

    public void setPackagePrefix(String packagePrefix) {
        this.packagePrefix = packagePrefix;
    }

    @Override
    protected void append(ILoggingEvent eventObject) {
        if (eventObject.getLevel().isGreaterOrEqual(minLevel) &&
                (OptionHelper.isEmpty(packagePrefix) ||
                        eventObject.getLoggerName().startsWith(packagePrefix))) {

            System.out.println("拦截到日志，日志级别: " + eventObject.getLevel() + "，日志信息: " + eventObject.getFormattedMessage());

            // 可以根据日志级别进行过滤
            if (eventObject.getLevel().isGreaterOrEqual(Level.ERROR)) {
                // 只处理 ERROR 及以上级别的日志
                // 可以在这里添加更多的业务逻辑，比如发送警报等
                System.out.println("这是一条重要的错误日志，需要特别关注！");
            }

        }

        // 将日志继续传递给下一个 Appender（如果有的话）
        // 这里只是简单示例，实际中可能需要更复杂的处理
        // 比如将日志输出到文件、控制台等
        // 这里只是简单打印到控制台

    }
}


/*
class Main {
    public static void main(String[] args) {
        LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
        Logger rootLogger = loggerContext.getLogger(Logger.ROOT_LOGGER_NAME);

        // 创建并添加自定义的日志拦截器（Appender）
        LoggingInterceptorAppender interceptorAppender = new LoggingInterceptorAppender();
        interceptorAppender.start();
        rootLogger.addAppender(interceptorAppender);

        // 模拟输出日志
        org.slf4j.Logger slf4jLogger = LoggerFactory.getLogger(Main.class);
        slf4jLogger.info("这是一条普通的 INFO 日志");
        slf4jLogger.error("这是一条 ERROR 日志");
    }
}*/
